package com.rongkang.interview.juc.lock;

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @Description: 信号量 ，相当于抢车位，多个线程抢多个位置
 * @author: 荣康
 * @date: 2021/12/6
 */
public class SemaphoreDemo {
    public static void main(String[] args) {
        //创建三个信号量，模拟车位，非公平锁
        Semaphore semaphore = new Semaphore(3, false);
        for (int i = 0; i < 6; i++) {
            final int temp = i;
            //6辆车，抢三个车位
            new Thread(() -> {
                try {
                    semaphore.acquire();//第一辆车抢到车位，信号量减一
                    System.out.println(Thread.currentThread().getName()+"\t 第" + temp +"辆车抢到车位");
                    TimeUnit.SECONDS.sleep(3);//每辆车停三秒开走
                    System.out.println(Thread.currentThread().getName()+"\t 第" + temp +"辆车离开车位");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }finally {
                    //释放停车位
                    semaphore.release();
                }
            }, String.valueOf(i)).start();
        }
    }
}
